package thread.poll;


import java.util.concurrent.*;

/**
 * @author zhang peipei
 */
public class ThreadPoll1 {
    /**
     * 线程池共有4种类型,因为ThreadPoolExecutor类只有四个构造方法
     */




    public static void main(String[] args) {

        /**
         * 固定容量线程池
         * 特点：只有核心线程，线程数量固定，执行完立即回收，任务队列为链表结构的有界队列。
         * 应用场景：控制线程最大并发数。
         */
        ExecutorService fixedThreadPoll = Executors.newFixedThreadPool(6);
        Runnable task = ()-> System.out.println("execute task");
        fixedThreadPoll.execute(task);

        /**
         * 定时线程池
         * 特点：核心线程数量固定，非核心线程数量无限，执行完闲置 10ms 后回收，任务队列为延时阻塞队列。
         * 应用场景：执行定时或周期性的任务。
         */
        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
        Runnable task2 = ()-> System.out.println("execute task2");
        // 延迟1s后执行任务
        scheduledThreadPool.schedule(task2, 1, TimeUnit.SECONDS);
        // 延迟10ms后、每隔1000ms执行任务
        scheduledThreadPool.scheduleAtFixedRate(task2,10,1000,TimeUnit.MILLISECONDS);

        /**
         * 可缓存线程池
         * 特点：无核心线程，非核心线程数量无限，执行完闲置 60s 后回收，任务队列为不存储元素的阻塞队列。
         * 应用场景：执行大量、耗时少的任务。
         */

        ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
        Runnable task3 = ()-> System.out.println("execute task3");
        cachedThreadPool.execute(task3);

        /**
         * 单线程化线程池
         * 特点：只有 1 个核心线程，无非核心线程，执行完立即回收，任务队列为链表结构的有界队列。
         * 应用场景：不适合并发但可能引起 IO 阻塞性及影响 UI 线程响应的操作，如数据库操作、文件操作等。
         */
        ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
        Runnable task4 = ()-> System.out.println("execute task4");
        singleThreadExecutor.execute(task4);



    }


}
